package com.xianrenit.xianrenpuzi.manager.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.xianrenit.xianrenpuzi.manager.mapper.CategoryMapper;
import com.xianrenit.xianrenpuzi.model.dto.excel.CateExcelDto;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
@Component
public class CateExcelDataListener extends AnalysisEventListener<CateExcelDto> {
    @Resource
    CategoryMapper categoryMapper;
    private List<CateExcelDto> cates = new ArrayList<>();
    private Integer limit = 100;
    @Override
    public void invoke(CateExcelDto data, AnalysisContext context) {
        //判断 如果数据已存在 不新增
        // 如果一个分类的id已存在，或者 和他同级的分类中已存在他的名称  表示数据已存在 不用新增
        if(categoryMapper.exists(data)){
            return;
        }
        cates.add(data);
        if(cates.size()>=limit){
            //达到阈值，保存缓存数据到数据库
            categoryMapper.batchSave(cates);
            //清空list缓存
            cates.clear();
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //将剩余没有达到阈值的数据保存到数据库
        if(cates.size()>0){
            categoryMapper.batchSave(cates);
            //清空list缓存
            cates.clear();
        }
    }
}
